<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // promise对象then方法 的2种回调；
      // 每一个promise对象 都会有一个固有方法 ，这个方法是then方法；
      let p = new Promise((resolve, reject) => {
        setTimeout(() => {
          //  resolve("123");
          reject("error1111");
        }, 2000);
      });
      //then 里会有两种回调
      //第一种 onResolve回调函数
      //会在promise对象调用resolve函数的时候调用这个方法
      //onResolve函数里的形参接受的是promiseResult的值  就是调用resolve函数是传入的实参

      //
      //第二种onReject回调函数 多数情况下可以省略
      //onRejected里的参数是reject传入的参数 也是promiseResult的值
      let onResolve = function () {
        console.log("onResolved执行了");
      };
      let onRejected = function () {
        console.log("onReject执行了");
      };
      p.then(onResolve, onRejected);

      //改造回调的逻辑
      function fn1() {
        setTimeout(() => {
          console.log("1111");
        }, 2000);
      }
      fn1();
      console.log("fn1执行完了");

      // 方式一： ES5的回调函数
      // function fn1(cb){
      //     setTimeout(() => {
      //         console.log("1111");
      //         cb();
      //     }, 2000);
      // }
      // fn1(function(){
      //     console.log("fn1执行完了");
      // })

      // 方式二： promise
      function fn1() {
        let p = new Promise((resolve) => {
          setTimeout(() => {
            console.log("1111");
            resolve();
          }, 2000);
        });
        return p;
      }

      fn1().then(function () {
        console.log("fn1执行完了");
      });
    </script>
  </body>
</html>
